home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Utilities / Commodities / Yak / Source / Prefs / BGUI / DigitalClock_window.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-09  |  22.7 KB  |  468 lines

  1. /************************************************************************
  2. **********************  BGUI DIGITAL CLOCK WINDOW  **********************
  3. ************************************************************************/
  4.  
  5. #include <exec/types.h>
  6. #include <dos/datetime.h>
  7. #include <intuition/intuition.h>
  8. #include <intuition/classes.h>
  9. #include <intuition/classusr.h>
  10. #include <intuition/imageclass.h>
  11. #include <intuition/gadgetclass.h>
  12. #include <intuition/intuitionbase.h>
  13. #include <libraries/bgui.h>
  14. #include <libraries/bgui_macros.h>
  15. #include <proto/exec.h>
  16. #include <proto/intuition.h>
  17. #include <proto/bgui.h>
  18. #include <proto/wb.h>
  19. #include <string.h>
  20.  
  21.  
  22. #include "yak.h"
  23. #include "version.h"
  24. #include "gui.h"
  25. #include "DigitalClock_window.h"
  26. #include "DigitalClock.h"
  27. #include "Hotkey_types.h"
  28. #include "yak_locale_strings.h"
  29.  
  30. /************************************************************************
  31. *****************************  REFERENCES  ******************************
  32. ************************************************************************/
  33.  
  34. IMPORT LONG (*HandleReturnID)(LONG ID);
  35.  
  36. /* Online help system */
  37. IMPORT void ShowYakHelp(char *, char *);
  38. IMPORT char *PrefsHelp;
  39.  
  40. /************************************************************************
  41. *****************************  LOCAL DATA  ******************************
  42. ************************************************************************/
  43.  
  44. struct Window   *DigitalClockWnd = NULL;
  45. Object          *DigitalClockWndObj = NULL;
  46. Object          *DigitalClockObjects[DigitalClock_CNT];
  47. struct IBox      DigitalClockBox;
  48. BOOL             DigitalClockBoxValid = FALSE;
  49.  
  50. UBYTE *DateFormatLabels[6];
  51. UBYTE *ScreenSelectionLabels[6];
  52.  
  53. /************************************************************************
  54. **********************  CREATEDIGITALCLOCKWINDOW()  *********************
  55. *************************************************************************
  56. * Create the digital clock window object tree. Returns the window object
  57. * ptr or NULL if create failed. Gadgets are initialised with default
  58. * values, InitDigitalClockGadgets must be called after window opened to
  59. * reflect current settings.
  60. *
  61. *************************************************************************/
  62.  
  63. APTR CreateDigitalClockWindow(void)
  64. {
  65. Object  *obj;
  66.  
  67. /* put localised strings into dateformat cycle gadget labels */
  68.  
  69. DateFormatLabels[0] = getString(DATE_FORMAT_DOS);
  70. DateFormatLabels[1] = getString(DATE_FORMAT_INT);
  71. DateFormatLabels[2] = getString(DATE_FORMAT_USA);
  72. DateFormatLabels[3] = getString(DATE_FORMAT_CDN);
  73. DateFormatLabels[4] = getString(DATE_FORMAT_LOCALE);
  74. DateFormatLabels[5] = NULL;
  75.  
  76. /* put localised strings into screenselection cycle gadget labels */
  77.  
  78. ScreenSelectionLabels[0] = getString(WORKBENCH_SCREEN);
  79. ScreenSelectionLabels[1] = getString(FRONT_SCREEN);
  80. ScreenSelectionLabels[2] = getString(FRONT_PUBSCREEN);
  81. ScreenSelectionLabels[3] = getString(DEF_PUBSCREEN);
  82. ScreenSelectionLabels[4] = getString(BY_SCREEN_TITLE_OPT);
  83. ScreenSelectionLabels[5] = NULL;
  84.  
  85. obj = WindowObject,
  86.         WINDOW_PubScreenName, PubScreenName,
  87.         WINDOW_Title,           getString(DigitalClock),
  88.         WINDOW_ScreenTitle,     getString(COPYRIGHT_STRING),
  89.         WINDOW_SmartRefresh, TRUE,
  90.         WINDOW_SizeBottom,      FALSE,                  /* put size gadget in right border */
  91.         WINDOW_SizeRight,       TRUE,
  92.         WINDOW_AutoAspect,      TRUE,                   /* automatic edges pixel width */
  93.         WINDOW_Position,        POS_CENTERMOUSE,
  94.         (DigitalClockBoxValid ? WINDOW_Bounds : TAG_IGNORE), &DigitalClockBox,
  95.         WINDOW_AppWindow,       TRUE,                   /* make it an appwindow */
  96.         WINDOW_RMBTrap,         TRUE,                   /* trap rmb - no menu */
  97.         WINDOW_CloseGadget,     FALSE,                  /* no windowclose gadget please */
  98.         (TextFont ? WINDOW_Font : TAG_IGNORE),  &Attr,  /* use font if specified */
  99.         WINDOW_HelpFile,        PrefsHelp,              /* online help system */
  100.         WINDOW_HelpNode,        "Digital Clock",
  101.         WINDOW_MasterGroup,
  102.                 VGroupObject, Spacing(4), HOffset(4), VOffset(4),
  103.                         StartMember,
  104.                                 CH_DC_State = CheckBoxObject,
  105.                                         LAB_Label,              getString(STATE_ACTIVE_STRING),
  106.                                         LAB_Place,              PLACE_LEFT,
  107.                                         GA_ID,                  GD_DC_State,
  108.                                         ButtonFrame,
  109.                                         FRM_Flags,              FRF_EDGES_ONLY,
  110.                                 EndObject, FixMinSize,
  111.                         EndMember,
  112.                         VarSpace(DEFAULT_WEIGHT/10),
  113.                         StartMember,
  114.                                 HGroupObject, Spacing(4),
  115.                                         StartMember,
  116.                                                 VGroupObject, Spacing(4),
  117.                                                         StartMember,
  118.                                                                 INT_DC_Offset = StringObject,
  119.                                                                         LAB_Label,              getString(DigitalClockOffset_STRING),
  120.                                                                         RidgeFrame,
  121.                                                                         STRINGA_LongVal,0,
  122.                                                                         STRINGA_MaxChars,4,
  123.                                                                         STRINGA_MinCharsVisible,6,
  124.                                                                         STRINGA_Justification,STRINGRIGHT,
  125.                                                                         GA_ID,                  GD_DC_Offset,
  126.                                                                         GA_TabCycle,    TRUE,
  127.                                                                 EndObject,
  128.                                                         EndMember,
  129.                                                         VarSpace(DEFAULT_WEIGHT/10),
  130.                                                         StartMember,
  131.                                                                 CH_DC_ShowDate = CheckBoxObject,
  132.                                                                         LAB_Label,              getString(DigitalClockShowDate_STRING),
  133.                                                                         LAB_Place,              PLACE_LEFT,
  134.                                                                         GA_ID,                  GD_DC_ShowDate,
  135.                                                                         ButtonFrame,
  136.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  137.                                                                 EndObject, FixMinSize,
  138.                                                         EndMember,
  139.                                                         VarSpace(DEFAULT_WEIGHT/10),
  140.                                                         StartMember,
  141.                                                                 CH_DC_ShowSecs = CheckBoxObject,
  142.                                                                         LAB_Label,              getString(DigitalClockShowSecs_STRING),
  143.                                                                         LAB_Place,              PLACE_LEFT,
  144.                                                                         GA_ID,                  GD_DC_ShowSecs,
  145.                                                                         ButtonFrame,
  146.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  147.                                                                 EndObject, FixMinSize,
  148.                                                         EndMember,
  149.                                                 EndObject,
  150.                                         EndMember,
  151.                                         StartMember,
  152.                                                 VGroupObject, Spacing(4),
  153.                                                         StartMember,
  154.                                                                 INT_DC_Interval = StringObject,
  155.                                                                         LAB_Label,              getString(DigitalClockInterval_STRING),
  156.                                                                         RidgeFrame,
  157.                                                                         STRINGA_LongVal,0,
  158.                                                                         STRINGA_MaxChars,4,
  159.                                                                         STRINGA_MinCharsVisible,6,
  160.                                                                         STRINGA_Justification,STRINGRIGHT,
  161.                                                                         GA_ID,                  GD_DC_Interval,
  162.                                                                         GA_TabCycle,    TRUE,
  163.                                                                 EndObject,
  164.                                                         EndMember,
  165.                                                         VarSpace(DEFAULT_WEIGHT/10),
  166.                                                         StartMember,
  167.                                                                 CH_DC_ShowDay = CheckBoxObject,
  168.                                                                         LAB_Label,              getString(DigitalClockShowDay_STRING),
  169.                                                                         LAB_Place,              PLACE_LEFT,
  170.                                                                         GA_ID,                  GD_DC_ShowDay,
  171.                                                                         ButtonFrame,
  172.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  173.                                                                 EndObject, FixMinSize,
  174.                                                         EndMember,
  175.                                                         VarSpace(DEFAULT_WEIGHT/10),
  176.                                                         StartMember,
  177.                                                                 CH_DC_ShortDay = CheckBoxObject,
  178.                                                                         LAB_Label,              getString(DigitalClockShortDay_STRING),
  179.                                                                         LAB_Place,              PLACE_LEFT,
  180.                                                                         GA_ID,                  GD_DC_ShortDay,
  181.                                                                         ButtonFrame,
  182.                                                                        FRM_Flags,              FRF_EDGES_ONLY,
  183.                                                                 EndObject, FixMinSize,
  184.                                                         EndMember,
  185.                                                 EndObject,
  186.                                         EndMember,
  187.                                 EndObject, Weight(DEFAULT_WEIGHT*3),
  188.                         EndMember,
  189.                         VarSpace(DEFAULT_WEIGHT/10),
  190.                         StartMember,
  191.                                 CYC_DC_DateFormat = CycleObject,
  192.                                         LAB_Label,              getString(DigitalClockDateFormat_STRING),
  193.                                         GA_ID,                  GD_DC_DateFormat,
  194.                                         ButtonFrame,
  195.                                         CYC_Labels,             DateFormatLabels,
  196.                                         CYC_Popup,              TRUE,   /* "drop-down" menu */
  197.                                 EndObject,
  198.                         EndMember,
  199.                         VarSpace(DEFAULT_WEIGHT/10),
  200.                         StartMember,
  201.                                 STR_DC_LocaleDateFormat = StringObject,
  202.                                         LAB_Label,              getString(DigitalClockLocaleDateFormat_STRING),
  203.                                         STRINGA_MaxChars,       256,
  204.                                         GA_ID,                  GD_DC_LocaleDateFormat,
  205.                                         RidgeFrame,
  206.                                 EndObject,
  207.                         EndMember,
  208.                         VarSpace(DEFAULT_WEIGHT/10),
  209.                         StartMember,
  210.                                 CYC_DC_ScreenSelection = CycleObject,
  211.                                         LAB_Label,              getString(DigitalClockScreenSelection_STRING),
  212.                                         GA_ID,                  GD_DC_ScreenSelection,
  213.                                         ButtonFrame,
  214.                                         CYC_Labels,             ScreenSelectionLabels,
  215.                                         CYC_Popup,              TRUE,   /* "drop-down" menu */
  216.                                 EndObject,
  217.                         EndMember,
  218.                         VarSpace(DEFAULT_WEIGHT/10),
  219.                         StartMember,
  220.                                 STR_DC_ScreenPattern = StringObject,
  221.                                         LAB_Label,              getString(DigitalClockScreenPattern_STRING),
  222.                                         STRINGA_MaxChars,       PATLEN,
  223.                                         GA_ID,                  GD_DC_ScreenPattern,
  224.                                         RidgeFrame,
  225.                                 EndObject,
  226.                         EndMember,
  227.                         StartMember,
  228.                                 HorizSeparator,
  229.                         EndMember,
  230.                         StartMember,
  231.                                 HGroupObject,
  232.                                         VarSpace(DEFAULT_WEIGHT),
  233.                                         StartMember,
  234.                                                 BT_DC_OK = Button(getString(OK_STRING),GD_DC_OK),
  235.                                         EndMember,
  236.                                         VarSpace(DEFAULT_WEIGHT),
  237.                                 EndObject,
  238.                         EndMember,
  239.                 EndObject,
  240.         EndObject;
  241.  
  242.  
  243. if (obj)
  244.         {
  245.         /* set tab cycle order between string gadgets */
  246.         DoMethod(obj,WM_TABCYCLE_ORDER,
  247.             INT_DC_Offset,
  248.             INT_DC_Interval,
  249.             STR_DC_LocaleDateFormat,
  250.             STR_DC_ScreenPattern,
  251.             NULL);
  252.         }
  253.  
  254. return(obj);
  255. }
  256.  
  257. /************************************************************************
  258. **********************  CLOSEDIGITALCLOCKWINDOW()  **********************
  259. *************************************************************************
  260. * Close the digital clock window, disposing of the window object.
  261. *
  262. *************************************************************************/
  263.  
  264. void CloseDigitalClockWindow(void)
  265. {
  266. if (DigitalClockWnd)
  267.         {
  268.         GetAttr(WINDOW_Bounds,DigitalClockWndObj,(ULONG *) &DigitalClockBox);
  269.         DigitalClockBoxValid = TRUE;
  270.         }
  271.  
  272. DisposeObject(DigitalClockWndObj);
  273. DigitalClockWndObj = NULL;
  274. DigitalClockWnd = NULL;
  275. }
  276.  
  277. /************************************************************************
  278. *********************  INITDIGITALCLOCKGADGETS()  ***********************
  279. *************************************************************************
  280. * Initialize the digital clock window gadgets to reflect current
  281. * settings.
  282. *************************************************************************/
  283.  
  284. static void InitDigitalClockGadgets(void)
  285. {
  286. BOOL UseLocale;
  287.  
  288. InitWindowGadget(GDX_DC_State, GA_Selected, DC_V_Config.State, DIGITALCLOCK_WINDOW);
  289. InitWindowGadget(GDX_DC_Offset, STRINGA_LongVal, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
  290. InitWindowGadget(GDX_DC_Interval, STRINGA_LongVal, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
  291. InitWindowGadget(GDX_DC_ShowDate, GA_Selected, DC_V_Config.ShowDate, DIGITALCLOCK_WINDOW);
  292. InitWindowGadget(GDX_DC_ShowDay, GA_Selected, DC_V_Config.ShowDay, DIGITALCLOCK_WINDOW);
  293. InitWindowGadget(GDX_DC_ShortDay, GA_Selected, DC_V_Config.ShortDay, DIGITALCLOCK_WINDOW);
  294. InitWindowGadget(GDX_DC_ShowSecs, GA_Selected, DC_V_Config.ShowSecs, DIGITALCLOCK_WINDOW);
  295. InitWindowGadget(GDX_DC_DateFormat, CYC_Active, DC_V_Config.DateFormat, DIGITALCLOCK_WINDOW);
  296. InitWindowGadget(GDX_DC_LocaleDateFormat, STRINGA_TextVal, (LONG)DC_V_Config.LocaleDateFormat, DIGITALCLOCK_WINDOW);
  297. InitWindowGadget(GDX_DC_ScreenPattern, STRINGA_TextVal, (LONG)DC_V_Config.ScreenPatternData.patstr, DIGITALCLOCK_WINDOW);
  298.  
  299. if (DC_V_Config.State == DC_C_ACTIVE)
  300.     {
  301.     InitWindowGadget(GDX_DC_Offset, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  302.     InitWindowGadget(GDX_DC_Interval, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  303.  
  304.     UseLocale = (DC_V_Config.DateFormat == DC_C_LocaleDateFormat);
  305.  
  306.     InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  307.     InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  308.  
  309.     if (UseLocale)
  310.         InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  311.     else
  312.         InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, (DC_V_Config.ShowDay == FALSE), DIGITALCLOCK_WINDOW);
  313.             
  314.     InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, UseLocale, DIGITALCLOCK_WINDOW);
  315.     InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  316.     InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, !UseLocale, DIGITALCLOCK_WINDOW);
  317.  
  318.     InitWindowGadget(GDX_DC_ScreenSelection, CYC_Active, DC_V_Config.ScreenSelection, DIGITALCLOCK_WINDOW);
  319.     InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, FALSE, DIGITALCLOCK_WINDOW);
  320.     InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled, 
  321.      (DC_V_Config.ScreenSelection != DC_C_ScreensByPattern), DIGITALCLOCK_WINDOW);
  322.     }
  323. else
  324.     {
  325.     InitWindowGadget(GDX_DC_Offset, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  326.     InitWindowGadget(GDX_DC_Interval, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  327.     InitWindowGadget(GDX_DC_ShowDate, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  328.     InitWindowGadget(GDX_DC_ShowDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  329.     InitWindowGadget(GDX_DC_ShortDay, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  330.     InitWindowGadget(GDX_DC_ShowSecs, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  331.     InitWindowGadget(GDX_DC_DateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  332.     InitWindowGadget(GDX_DC_LocaleDateFormat, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  333.     InitWindowGadget(GDX_DC_ScreenSelection, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  334.     InitWindowGadget(GDX_DC_ScreenPattern, GA_Disabled, TRUE, DIGITALCLOCK_WINDOW);
  335.     }
  336. }
  337.  
  338. /************************************************************************
  339. ********************  HANDLEDIGITALCLOCKRETURNID()  *********************
  340. *************************************************************************
  341. * Handle msgs arriving at digital clock window - supply the ID returned
  342. * by BGUI. Returns either RET_OKAY or RET_QUIT.
  343. *
  344. *************************************************************************/
  345.  
  346. LONG HandleDigitalClockReturnID(LONG id)
  347. {
  348. LONG    ret,num;
  349.  
  350. ret = RET_OKAY;
  351.  
  352. switch(id)
  353.         {
  354.         case GD_DC_OK:
  355.                 CloseDigitalClockWindow();
  356.                 if (!ShowWindowID(ROOT_WINDOW))
  357.                     ret= RET_QUIT;
  358.                 break;
  359.  
  360.         case GD_DC_State:
  361.                 DC_V_Config.State ^= TRUE;
  362.                 InitDigitalClockGadgets();
  363.                 break;
  364.  
  365.         case GD_DC_Offset:
  366.                 GetAttr(STRINGA_LongVal,INT_DC_Offset,(ULONG *)&num);
  367.                 if (num >= 0) 
  368.                     DC_V_Config.Offset = num;
  369.                 else 
  370.                     DisplayBeep(DigitalClockWnd->WScreen);
  371.                 InitWindowGadget(GDX_DC_Offset, STRINGA_LongVal, DC_V_Config.Offset, DIGITALCLOCK_WINDOW);
  372.                 break;
  373.  
  374.         case GD_DC_Interval:
  375.                 GetAttr(STRINGA_LongVal,INT_DC_Interval,(ULONG *)&num);
  376.                 if (num > 0) 
  377.                     DC_V_Config.Interval = num;
  378.                 else 
  379.                     DisplayBeep(DigitalClockWnd->WScreen);
  380.                 InitWindowGadget(GDX_DC_Interval, STRINGA_LongVal, DC_V_Config.Interval, DIGITALCLOCK_WINDOW);
  381.                 break;
  382.  
  383.         case GD_DC_ShowDate:
  384.                 DC_V_Config.ShowDate ^= TRUE;
  385.                 break;
  386.  
  387.         case GD_DC_ShowDay:
  388.                 DC_V_Config.ShowDay ^= TRUE;
  389.                 InitDigitalClockGadgets();
  390.                 break;
  391.  
  392.         case GD_DC_ShortDay:
  393.                 DC_V_Config.ShortDay ^= TRUE;
  394.                 break;
  395.  
  396.         case GD_DC_ShowSecs:
  397.                 DC_V_Config.ShowSecs ^= TRUE;
  398.                 break;
  399.  
  400.         case GD_DC_DateFormat:
  401.                 GetAttr(CYC_Active,CYC_DC_DateFormat,(ULONG *)&num);
  402.                 DC_V_Config.DateFormat = num;
  403.                 InitDigitalClockGadgets();
  404.                 break;
  405.  
  406.         case GD_DC_LocaleDateFormat:
  407.                 if (DC_V_Config.LocaleDateFormat)
  408.                     {
  409.                     FreeVec(DC_V_Config.LocaleDateFormat);
  410.                     }
  411.  
  412.                 GetAttr(STRINGA_TextVal,STR_DC_LocaleDateFormat,(ULONG *)&num);
  413.                 if (num)
  414.                     DC_V_Config.LocaleDateFormat = DupStr((char *)num);
  415.                 break;
  416.  
  417.         case GD_DC_ScreenSelection:
  418.                 GetAttr(CYC_Active,CYC_DC_ScreenSelection,(ULONG *)&num);
  419.                 DC_V_Config.ScreenSelection = num;
  420.                 InitDigitalClockGadgets();
  421.                 break;
  422.  
  423.         case GD_DC_ScreenPattern:
  424.                 NewPattern(GDX_DC_ScreenPattern, &DC_V_Config.ScreenPatternData,
  425.                    (struct Gadget *)STR_DC_ScreenPattern, DIGITALCLOCK_WINDOW);
  426.                 break;
  427.  
  428.         default:
  429.                 break;
  430.         }
  431.  
  432. return(ret);
  433. }
  434.  
  435. /************************************************************************
  436. **********************  SHOWDIGITALCLOCKWINDOW()  ***********************
  437. *************************************************************************
  438. * Create and open the DigitalClock window and initialize the gadgets to
  439. * reflect current settings. Sets up HandleReturnID function, curwin,
  440. * curwinobj and curwinID. Returns TRUE or FALSE to indicate success.
  441. *
  442. *************************************************************************/
  443.  
  444. BOOL ShowDigitalClockWindow(void)
  445. {
  446. if (DigitalClockWndObj = (Object *)CreateDigitalClockWindow())
  447.         {
  448.         if (DigitalClockWnd = WindowOpen(DigitalClockWndObj))
  449.                 {
  450.                 InitDigitalClockGadgets();
  451.                 HandleReturnID = HandleDigitalClockReturnID;
  452.                 curwin = DigitalClockWnd;
  453.                 curwinobj = DigitalClockWndObj;
  454.                 curwinID = DIGITALCLOCK_WINDOW;
  455.                 return(TRUE);
  456.                 }
  457.         }
  458.  
  459. CloseDigitalClockWindow();
  460. curwin = NULL;
  461. curwinobj = NULL;
  462. wndsigflag = 0L;
  463. appwinsigflag = 0L;
  464. return(FALSE);
  465. }
  466.  
  467.